import {login as loginApi} from "@/api/login.js";
import router from "@/router/index.js";
import {resetCurTime} from "@/utilities/authenticate.js";

export const loginStore = defineStore(
    'loginStore',
    {
        persist: {
            enabled: true,
            storage: sessionStorage
        },
        state(){
            return {
                // 是否已经验证
                isAuthentication: false,
                // 当前记录的 token
                token: '',
                // 当前点击的项
                curMenuItem: '',
                // 登录的时间
                loginTime: 0,
                // 当前的语言
                language: 'zh',
            }
        },
        actions: {
            /**
             * @brief 设置验证状态
             * @param isOk true表示已经验证
             */
            setAuthentication(isOk) {
                this.isAuthentication = isOk;
            },

            /**
             * @brief 设置 token
             * @param loginToken 需要记录的 token 值
             */
            setToken(loginToken) {
                this.token = loginToken
            },

            /**
             * @brief 点击登录按钮时,
             * @param userInfo
             * @returns {Promise<unknown>}
             */
            login(userInfo) {
                // 发起新的请求
                return new Promise((resolve, reject) => {
                    // 调用 axios 封装的 request
                    loginApi(userInfo)
                        // 获得的数据
                        .then((res) => {
                            // 设置登录时间
                            resetCurTime()
                            // 设置已经进行了验证
                            this.setAuthentication(true)
                            // 记录 token
                            this.setToken(res.token)
                            // 跳转到首页
                            router.replace('/')
                            // 继续执行
                            resolve()
                        })
                        .catch((err) => {
                            // 拒绝
                            reject(err)
                        })
                })
            },
            logout() {
                // 设置 token 无效
                this.token = ''
                // 设置登录时间置零
                this.loginTime = 0
                // 跳转到登录界面
                router.replace('/login')
            },
        }
    }
)